package world.xuewei.dao;

import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import world.xuewei.model.entity.Commodity;
import world.xuewei.model.entity.OrderItem;
import world.xuewei.model.entity.Orders;

import java.util.List;
import java.util.Map;
/**
 * 商品表(Commodity)表数据库访问层
 *
 * @author makejava
 * @since 2024-11-16 15:40:05
 */
public interface CommodityDao {


    //根据商品id获取商品信息
    List<Map<String, Object>> getSpecifications(@Param("commodityId") Long commodityId);

    //获取销量前三的商品
    List<Commodity> getTopSalesCommodities();


    //商家添加商品
    boolean addcommdity (Commodity commodity);
    //查看商家是否已有该商品
    List<Commodity> selectbywhere(Commodity commodity);


    /**
     * 增加商品库存
     * @param id 商品ID
     * @param quantity 增加数量
     */
    int addInventory(@Param("id") Long id, @Param("quantity") Integer quantity);


    /**
     * 商品下架
     * @param id 商品ID
     * @return 影响行数
     */
    int offline(@Param("id") Long id);


    /**
     * 商品上架
     */
    int online(@Param("id") Long id);


    /**
     * 添加收藏
     */
    int addFavorite(@Param("userId") Long userId, @Param("commodityId") Long commodityId);

    /**
     * 取消收藏
     */
    int removeFavorite(@Param("userId") Long userId, @Param("commodityId") Long commodityId);

    /**
     * 查询用户收藏的商品列表
     */
    List<Commodity> queryFavorites(@Param("userId") Long userId);









    /**
     * 根据ID查询商品
     */
    Commodity queryById(Long id);

    /**
     * 更新商品库存
     * @param id 商品ID
     * @param quantity 变化数量(正数增加,负数减少)
     */
    int updateInventory(@Param("id") Long id, @Param("quantity") Integer quantity);

    /**
     * 更新商品销量
     */
    int updateSaleCount(@Param("id") Long id, @Param("quantity") Integer quantity);

    /**
     * 查询商家的商品列表
     */
    List<Commodity> queryByMerchantId(@Param("merchantId") Long merchantId);

    /**
     * 根据分类查询商品
     */
    List<Commodity> queryByClassifyId(@Param("classifyId") Long classifyId);

    /**
     * 更新商品信息
     */
    int update(Commodity commodity);

    /**
     * 新增商品
     */
    int insert(Commodity commodity);

    /**
     * 删除商品(逻辑删除)
     */
    int delete(Long id);




    List<Commodity> getallcommodity();


    /**
     * 查询指定行数据
     *
     * @param commodity 查询条件
     * @param pageable  分页对象
     * @return 对象列表
     */
    List<Commodity> queryAllByLimit(Commodity commodity, @Param("pageable") Pageable pageable);

    /**
     * 统计总行数
     *
     * @param commodity 查询条件
     * @return 总行数
     */
    long count(Commodity commodity);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<Commodity> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<Commodity> entities);



    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Long id);

}

